home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-15 | 2.4 KB | 96 lines | [TEXT/MPS ] |
- {---------------------------------------------------------------}
- { SlaveTaskHandler }
- { © 1991 G. Sawitzki, Heidelberg}
- type
- tSlaveTaskHandler=object(tTaskHandler)
- ResultHandler:tReplyResultHandler;
- procedure tSlaveTaskHandler.init;override;
-
-
- function tSlaveTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;
- procedure tSlaveTaskHandler.MsgEvaluation(var msg:MsgPtr);override;
- end;
-
-
- procedure tSlaveTaskHandler.init;override;
- const
- cPrivilegedInterval=60; {ticks before feeling free for a new partner}
- begin
- inherited init;
-
- PrivilegedInterval :=cPrivilegedInterval;
-
- restart;
- end;
-
- function tSlaveTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;
- var anyErr:OsErr;l1,l2:longint;
- begin
- MsgUsable:=false;
- with tMsgHeaderPtr(msg^.msgPrioPtr)^ do begin
- if version<>cMyMsgHeaderVersion then begin
- if not master then gAppDone:=true; {should deregister}
- end else {we only accept the current version}
- case action of
- aNoop:;
- aExample: begin
- l1:=longint(cDefaultDistribution);{ work around bug in mpw pascal 3.2bX}
- l2:=longint(cDefaultDisplay);
- if (DistributionToken=l1) &
- (DisplayToken=l2) then begin
- with msg^ do
- if MsgCoreSize=0 then MsgUsable:=true else
- begin
- MsgCorePtr:=NewPtr(MsgCoreSize);
- MsgUsable:=MsgCorePtr<>nil;
- end;
- anyErr:=FlushMsg(cMsgNAttention);
- end ;
- end;
- aDone: gAppDone:=true;
- aSetConfig:begin
- with msg^ do
- if MsgCoreSize=0 then MsgUsable:=true else
- begin
- MsgCorePtr:=NewPtr(MsgCoreSize);
- MsgUsable:=MsgCorePtr<>nil;
- end;
- end;
- otherwise
- end;
- end;{with}
- end;
-
- procedure tSlaveTaskHandler.MsgEvaluation(var msg:MsgPtr);
- var h:handle;
- safeport:grafptr;
- tempstr:str255;
- l:longint;s:str255;
- myHeader:tMsgHeader;
- replysize:longint;
- anyErr:OsErr;
- tempPtr:tMsgHeaderPtr;
- begin
- myHeader:=tMsgHeaderPtr((msg^.MsgPrioPtr))^; {get a local copy of header info}
-
- if myHeader.action=aSetConfig then
- begin
- ProgramBreak('config change;g');
- theConfiguration:=tConfigurationPtr(msg^.MsgCorePtr)^;
-
-
- end else
- with msg^ do begin
- anyErr:=FlushMsg(cMsgNAttention);
- if spare then sysbeep(1);
- {generate as pict}
- h:=DoTaskCore(myHeader);
- if h<>nil then begin
- tempPtr:=tMsgHeaderPtr(msg^.MsgPrioPtr);
- tempPtr^:=myHeader;{ still to check}
- anyErr:=ResultHandler.Doreply(msg,h);
- end;
- DoTaskUpdate(h,myHeader,true);{warning:reuse of myheader. transmit may still be pending}
- end;
- end;
-